import java.util.LinkedList;
import java.util.Queue;

public class demo1 {
    int[]dx={0,0,1,-1};
    int[]dy={1,-1,0,0};
    public int[][] updateMatrix(int[][] mat) {
        int m=mat.length;
        int n=mat[0].length;
        int[][]div=new int[m][n];
        Queue<int[]>queue=new LinkedList<>();
        for(int i=0;i<m;i++){
            for (int j = 0; j <n ; j++) {
                if(mat[i][j]==0){
                    queue.add(new int[]{i,j});
                    div[i][j]=0;
                }else {
                    div[i][j]=-1;
                }
            }
        }
        while (!queue.isEmpty()){
            int[] arr = queue.poll();
            int a=arr[0];
            int b=arr[1];
            for (int i = 0; i <4 ; i++) {
                int x=a+dx[i];
                int y=b+dy[i];
                if(x>=0&&x<m&&y>=0&&y<n&&div[x][y]==-1&&mat[x][y]!=0){
                    div[x][y]=div[a][b]+1;
                    queue.add(new int[]{x,y});
                }
            }
        }
        return div;
    }
}
